package com.wbao.dianniu.logical;

import android.content.Context;
import android.support.multidex.MultiDexApplication;
import android.support.text.emoji.EmojiCompat;
import android.support.text.emoji.bundled.BundledEmojiCompatConfig;

import com.alibaba.sdk.android.media.WantuService;
import com.alibaba.wxlib.util.SysUtil;
import com.baidu.mapapi.SDKInitializer;
import com.mob.MobSDK;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.umeng.analytics.MobclickAgent;
import com.umeng.analytics.MobclickAgent.EScenarioType;
import com.wbao.dianniu.im.InitHelper;


public class DnApplication extends MultiDexApplication {
	private static final String TAG = DnApplication.class.getSimpleName();
	 public static final String NAMESPACE = "openim";
	 private static Context sContext;
	 public static WantuService wantuService;
	 
		public static Context getContext(){
			return sContext;
		}
		
		@Override
		protected void attachBaseContext(Context base) {
			super.attachBaseContext(base);
//			initialize();
//            MultiDex.install(this);
		}

	/**
	 *
	 */
	@Override
	public void onCreate() {
		super.onCreate();
		// 注释移动热修复
		// queryAndLoadNewPatch不可放在attachBaseContext 中，否则无网络权限，建议放在后面任意时刻，如onCreate中
//		SophixManager.getInstance().queryAndLoadNewPatch();

		// 内存检测溢出初始化 dubug环境使用，线上版本屏蔽
//		LeakCanary.install(this);

		EmojiCompat.Config config = new BundledEmojiCompatConfig(this);
		EmojiCompat.init(config);


//		System.out.println("start 1 time:" + System.currentTimeMillis());
		try {	// 增加try catch 在mustRunFirstInsideApplicationOnCreate初始化时会请求open log file 权限，此权限6.0以上系统可能被拒绝
			// todo
			// Application.onCreate中，首先执行这部分代码，以下代码固定在此处，不要改动，这里return是为了退出Application.onCreate！！！
			if (mustRunFirstInsideApplicationOnCreate()) {
				// todo 如果在":TCMSSevice"进程中，无需进行openIM和app业务的初始化，以节省内存
				return;
			}
		}catch (Exception e){
			e.printStackTrace();
		}
//		System.out.println("start 2 time:" + System.currentTimeMillis());
		// 初始化云旺SDK
		InitHelper.initYWSDK(this);
//		System.out.println("start 2 - 3 time:" + System.currentTimeMillis());
		// 顽兔初始化
		WantuService.enableHttpDNS(); // 可选。为了避免域名劫持，建议开发者启用HttpDNS
		WantuService.enableLog(); //在调试时，可以打开日志。正式上线前可以关闭
//		System.out.println("start 3 time:" + System.currentTimeMillis());
		wantuService = WantuService.getInstance();
		wantuService.asyncInit(this);
//		System.out.println("start 4 time:" + System.currentTimeMillis());
		try {
			// 注意该方法要再setContentView方法之前实现 初始化 地图插件
			SDKInitializer.initialize(getApplicationContext());
		}catch (Exception e){
			e.printStackTrace();
		}

//		System.out.println("start 5 time:" + System.currentTimeMillis());
		// 初始化分享组件，小内存消耗，可以多次初始化
        MobSDK.init(this, "1475bc40e11d8", "0400de1ade4700e112b21b92e24b9c40");
//		System.out.println("start 6 time:" + System.currentTimeMillis());
		// SDK在统计Fragment时，需要关闭Activity自带的页面统计，
        // 然后在每个页面中重新集成页面统计的代码(包括调用了 onResume 和 onPause 的Activity)。
		 MobclickAgent.openActivityDurationTrack(false);
		 MobclickAgent.enableEncrypt(true);
		 MobclickAgent.setScenarioType(this, EScenarioType.E_UM_NORMAL);
//		System.out.println("start 7 time:" + System.currentTimeMillis());
		initImageLoader();
//		System.out.println("start 8 time:" + System.currentTimeMillis());

		// 程序异常捕获初始化...
		CrashHandler crashHandler = CrashHandler.getInstance(getApplicationContext());
		crashHandler.init();
//		System.out.println("start 9 time:" + System.currentTimeMillis());
	}
	
	private boolean mustRunFirstInsideApplicationOnCreate() {
		//必须的初始化
		SysUtil.setApplication(this);
		sContext = getApplicationContext();
		return SysUtil.isTCMSServiceProcess(sContext);
	}

	private void initImageLoader() {
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).imageDownloader(
				new BaseImageDownloader(this, 60 * 1000, 60 * 1000)) // connectTimeout超时时间
				.build();
		ImageLoader.getInstance().init(config);
	}

	// 注释移动热修复
	/*private void initialize(){
		String appVersion;
		try {
			appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
		} catch (Exception e) {
			appVersion = "1.0";
		}
		SophixManager.getInstance().setContext(this)
				.setAppVersion(*//*getAppVersion()*//*appVersion)
				.setAesKey(null)
				.setEnableDebug(true)
				.setPatchLoadStatusStub(new PatchLoadStatusListener() {
					@Override
					public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
						// 补丁加载回调通知
						if (code == PatchStatus.CODE_LOAD_SUCCESS) {
							// 表明补丁加载成功
						} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
							// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
							// 建议: 用户可以监听进入后台事件, 然后应用自杀
						} else if (code == PatchStatus.CODE_LOAD_FAIL) {
							// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
						} else {
							// 其它错误信息, 查看PatchStatus类说明
						}
					}
				}).initialize();
    }*/

}
